package com.ant.backstage.mvcInterceptor;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.spring.web.SpringfoxWebMvcConfiguration;

/**
 * 拦截器
 */
@SpringBootApplication
@ConditionalOnClass(SpringfoxWebMvcConfiguration.class)
@Configuration
public class WebMvcConfig  implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //接口文档相关拦截
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
//        registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        /*
            classpath和classpath*区别：
            classpath：默认只会在你项目的class路径中查找文件。
            classpath*：默认不仅包含class路径，还包括jar文件中（class路径）进行查找。
                注意：
                    使用classpath*:Spring需要遍历所有的classpath，所以加载速度是很慢的；故在设计中，应该尽可能划分好资源文件所在的路径，尽量避免使用classpath*。
                    classpath*的使用：
                    当项目中有多个classpath路径，并同时加载多个classpath路径下（此种情况多数不会遇到）的文件，就发挥了作用，如果不加，则表示仅仅加载第一个classpath路径。
         */
    }

    /**
     * 配置cors，解决前端访问后端的跨域资源问题
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //设置了前端的地址
                .allowedOrigins("http://localhost:8010")
                .allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS", "HEAD")
                .allowedHeaders("*")
                //将请求头里保存的token暴露出来给前端获取
                .exposedHeaders("Authorization");
    }



}